Ubuntu 22.04 LTS 환경에서의 ERPNext 설치 안내서
1. 서론
이 문서는 Ubuntu 22.04 LTS (Jammy Jellyfish) 서버 환경에 ERPNext 최신 안정 버전을 성공적으로 설치, 구성하고 프로덕션(실서비스) 환경에 배포하는 포괄적인 절차를 기술한다. 이 가이드는 단순히 명령어의 나열을 넘어, 각 단계의 기술적 배경과 중요성을 심도 있게 설명함으로써 시스템 관리자가 안정적이고 보안이 강화된 ERPNext 시스템을 구축할 수 있도록 지원하는 것을 목표로 한다.1
전체 설치 프로세스는 체계적인 접근법을 통해 오류 발생 가능성을 최소화하도록 설계되었으며, 크게 6개의 핵심 단계로 구성된다. 첫째, 시스템 요구사항을 확인하고 초기 서버 환경을 설정한다. 둘째, 데이터베이스, Python, Node.js 등 ERPNext 구동에 필수적인 핵심 의존성 패키지를 설치하고 최적화한다. 셋째, Frappe 프레임워크의 관리 도구인 Frappe Bench CLI를 설치하고 Bench 디렉터리를 초기화한다. 넷째, ERPNext 애플리케이션을 설치하고 실제 데이터가 저장될 사이트를 생성한다. 다섯째, Nginx와 Supervisor를 이용하여 개발 환경을 안정적인 프로덕션 환경으로 전환한다. 마지막으로, 보안 강화를 위한 SSL 인증서를 적용하고 멀티테넌시와 같은 고급 설정을 다룬다.1
2. 부: 사전 준비: 시스템 요구사항 및 환경 구성
2.1 시스템 요구사항 분석
ERPNext를 안정적으로 운영하기 위해서는 적절한 하드웨어 및 소프트웨어 환경을 사전에 확보하는 것이 매우 중요하다.
하드웨어 요구사항은 최소 2개의 CPU 코어, 4GB의 RAM, 그리고 40GB 이상의 SSD 저장 공간을 권장한다. 이는 운영체제, MariaDB 데이터베이스, Redis 캐시 서버, 그리고 ERPNext 애플리케이션이 동시에 원활하게 동작하기 위한 기준선이다.3 여기서 4GB RAM이라는 최소 사양은 임의로 정해진 값이 아니다. MariaDB의 성능은 InnoDB 버퍼 풀에 얼마나 많은 데이터를 캐시할 수 있는지에 크게 좌우되며, Supervisor에 의해 관리되는 다수의 Python 워커 프로세스와 Node.js 기반의 프론트엔드 자산 빌드 과정 역시 상당한 메모리를 소모한다. 자원이 부족할 경우, 특히 RAM이 부족하면 과도한 디스크 I/O가 발생하여 시스템 전반의 성능 저하를 초래하고 설치 과정 자체의 실패 원인이 될 수 있다.3
소프트웨어 요구사항은 새로 설치된 깨끗한(clean) Ubuntu 22.04 LTS 서버를 기준으로 한다. 서버에 대한 SSH(Secure Shell) 접근이 가능해야 하며, 모든 설치 및 구성 작업을 수행하기 위해 루트(root) 권한 또는 sudo 명령을 실행할 수 있는 일반 사용자 계정이 필수적이다.1
다음 표는 시스템 요구사항을 요약한 것이다.
Table 1: 시스템 요구사항 요약
| 구성요소 (Component) | 최소 사양 (Minimum) | 권장 사양 (Recommended) | 비고 (Notes) |
|---|---|---|---|
| 운영체제 (OS) | Ubuntu 22.04 LTS | Ubuntu 22.04 LTS | 새로 설치된 환경 권장 |
| CPU | 2 Cores | 4+ Cores | 동시 접속 사용자 수에 따라 결정 |
| RAM | 4 GB | 8+ GB | 데이터베이스 및 애플리케이션 성능에 결정적 |
| 저장 공간 (Storage) | 40 GB SSD | 80+ GB SSD | 속도를 위해 HDD보다 SSD를 강력히 권장 |
2.2 시스템 업데이트 및 업그레이드
본격적인 설치에 앞서, 운영체제의 패키지 목록을 최신 상태로 동기화하고, 이미 설치된 모든 패키지를 최신 버전으로 업그레이드하는 작업이 선행되어야 한다. 이 과정은 잠재적인 보안 취약점을 해결하고, 설치 과정에서 발생할 수 있는 패키지 간의 의존성 충돌 문제를 사전에 방지하여 안정적인 서버 환경의 기초를 마련한다.1
실행 명령어:
Bash
sudo apt-get update -y
sudo apt-get upgrade -y
2.3 ERPNext 전용 사용자 생성
보안 모범 사례에 따라, 시스템의 최고 관리자인 루트 사용자로 직접 애플리케이션을 설치하고 운영하는 것은 지양해야 한다. 대신, ERPNext 설치 및 관리를 위한 전용 사용자를 생성하고, 이 사용자에게 sudo 권한을 부여하여 필요한 경우에만 관리자 권한을 사용하도록 한다. 이는 권한 분리 원칙에 따라 시스템의 보안을 강화하는 중요한 조치이다.1
이때, 사용자명으로 frappe나 erpnext와 같이 예측 가능한 이름을 사용하는 것은 피하는 것이 좋다. 자동화된 공격 스크립트는 흔히 사용되는 기본 설정값을 표적으로 삼기 때문에, myerp_admin과 같이 예측하기 어려운 사용자명을 선택하면 공격자가 유효한 시스템 사용자 이름을 추측하기 어렵게 만들어 단순하지만 효과적인 보안 계층을 추가할 수 있다.9
실행 명령어: [frappe-user] 부분을 원하는 사용자명으로 대체하여 실행한다.
Bash
sudo adduser [frappe-user]
sudo usermod -aG sudo [frappe-user]
su - [frappe-user]
2.4 서버 시간대 설정
ERPNext 내에서 발생하는 모든 거래 기록, 시스템 로그, 예약된 작업(Scheduler) 등은 정확한 타임스탬프를 기반으로 동작한다. 따라서 서버의 시간대를 비즈니스가 운영되는 지역의 표준 시간으로 정확하게 설정하는 것은 데이터의 정합성을 유지하고 시스템이 올바르게 동작하는 데 필수적인 요소이다.6
실행 명령어:
Bash
# 예시: 아시아/서울 시간대로 설정
sudo timedatectl set-timezone "Asia/Seoul"
3. 부: 핵심 의존성 패키지 설치 및 구성
3.1 필수 빌드 도구 및 유틸리티 설치
ERPNext는 다양한 기술 스택의 조합으로 구성되어 있으므로, 여러 의존성 패키지들의 설치가 필요하다. 여기에는 Git을 통한 소스 코드 버전 관리, Python 패키지의 C 확장 모듈 컴파일을 위한 python3-dev, Python 가상 환경 구성을 위한 python3-venv, MariaDB 클라이언트 라이브러리인 libmysqlclient-dev, 그리고 시스템에서 PDF 문서를 생성하기 위한 wkhtmltopdf 등이 포함된다.1
실행 명령어 (통합):
Bash
sudo apt-get install -y git python3-dev python3-setuptools python3-pip python3.10-venv libmysqlclient-dev software-properties-common curl xvfb libfontconfig wkhtmltopdf
3.2 Python 환경 설정 (ERPNext v15+ 기준)
최신 ERPNext 버전(v15 이상)은 Python 3.11 이상의 버전을 요구한다. 하지만 Ubuntu 22.04 LTS의 기본 저장소에서 제공하는 Python 3의 기본 버전은 3.10이다. 이러한 버전 불일치는 ERPNext의 빠른 릴리즈 주기와 운영체제의 안정성 중심의 느린 패키지 업데이트 주기 사이에서 발생하는 필연적인 문제이다. 이 문제를 해결하기 위해, 최신 Python 버전을 제공하는 deadsnakes PPA(Personal Package Archive)를 시스템에 추가하고 이를 통해 Python 3.11을 설치해야 한다. 이 단계는 최신 ERPNext 버전을 설치하기 위한 필수 과정이며, 생략할 경우 bench init 과정에서 버전 호환성 오류로 인해 설치가 중단된다.4
실행 명령어:
Bash
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt-get update
sudo apt-get install -y python3.11 python3.11-dev python3.11-venv
3.3 MariaDB 데이터베이스 설치 및 보안 구성
ERPNext의 모든 데이터를 저장하는 핵심 구성 요소인 MariaDB 관계형 데이터베이스를 설치한다.1 설치 직후,
mysql_secure_installation 스크립트를 실행하여 데이터베이스 보안을 강화해야 한다. 이 스크립트는 데이터베이스의 루트(root) 계정 암호를 설정하고, 불필요한 익명 사용자를 제거하며, 원격 루트 로그인을 비활성화하는 등 필수적인 보안 조치를 자동화한다.10
실행 명령어:
Bash
sudo apt-get install -y mariadb-server mariadb-client
sudo mysql_secure_installation
또한, 한글을 포함한 다국어 데이터를 문제없이 처리하기 위해 데이터베이스 서버의 기본 문자 인코딩 설정을 utf8mb4로 변경하는 것이 매우 중요하다. 이 설정은 데이터 깨짐 현상을 방지하고 완전한 유니코드 문자를 지원하기 위해 필수적이다. /etc/mysql/mariadb.conf.d/50-server.cnf 설정 파일의 [mysqld] 섹션에 아래 내용을 추가하여 적용한다.1
설정 내용 (50-server.cnf의 [mysqld] 섹션에 추가):
Ini, TOML
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
innodb-file-format=barracuda
innodb-file-per-table=1
innodb-large-prefix=1
설정 변경 후에는 sudo systemctl restart mariadb 명령으로 MariaDB 서비스를 재시작하여 변경 사항을 적용해야 한다.
3.4 Node.js 및 JavaScript 도구 체인 설치
Frappe 프레임워크는 웹 인터페이스를 구성하는 JavaScript 및 CSS와 같은 프론트엔드 자산을 빌드하고 관리하기 위해 Node.js 환경을 필요로 한다. 특정 버전의 Node.js를 설치하고 관리하기 위해, 시스템 전역에 단일 버전을 설치하는 apt 방식보다는 NVM(Node Version Manager)을 사용하는 것이 강력히 권장된다. NVM은 사용자 홈 디렉터리 내에 Node.js를 설치하므로, 다른 애플리케이션과의 버전 충돌을 피할 수 있고, 필요에 따라 여러 버전을 손쉽게 전환하며 사용할 수 있어 장기적으로 더 유연하고 안정적인 서버 환경을 제공한다. ERPNext v15 이상 버전은 Node.js 18 또는 20 버전을 권장한다.3
실행 명령어 (NVM 사용):
Bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
source ~/.bashrc
nvm install 18
sudo npm install -g yarn
3.5 Redis 서버 설치
Redis는 고성능 인-메모리 데이터 저장소로서, ERPNext에서는 백그라운드에서 실행되는 장기 작업(예: 대량 이메일 발송, 보고서 생성)을 관리하는 작업 큐(Queue)와 시스템 성능 향상을 위한 캐싱(Caching) 용도로 사용된다.1
실행 명령어:
Bash
sudo apt-get install -y redis-server
4. 부: Frappe Bench 및 ERPNext 애플리케이션 설치
4.1 Frappe Bench CLI 설치
frappe-bench는 Frappe 프레임워크와 ERPNext 환경을 생성, 관리, 배포하는 데 사용되는 핵심적인 명령줄 인터페이스(CLI) 도구이다. Python의 패키지 관리자인 pip를 사용하여 설치한다.2
실행 명령어:
Bash
sudo pip3 install frappe-bench
설치 후, 터미널의 어느 위치에서나 bench 명령어를 인식할 수 있도록 사용자의 PATH 환경 변수에 ~/.local/bin 디렉터리를 추가해야 한다. 이 과정이 누락되면 bash: bench: command not found 와 같은 오류가 발생하게 되므로 반드시 수행해야 한다.1
Bash
echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc
source ~/.bashrc
4.2 Bench 디렉토리 초기화
bench init 명령어는 ERPNext 설치의 기반이 되는 새로운 디렉터리, 즉 ’Bench’를 생성하고 초기화하는 가장 중요한 단계이다. 이 명령어는 단순히 디렉터리를 생성하는 것을 넘어, 여러 복합적인 작업을 자동화한다. 첫째, ./env라는 이름의 Python 가상 환경을 생성하여 ERPNext의 Python 의존성을 시스템 전역 패키지와 완벽하게 격리시킨다. 둘째, 지정된 버전의 Frappe 프레임워크 소스 코드를 GitHub에서 복제(clone)한다. 셋째, 프레임워크를 설치하고 apps, sites, config 등 표준화된 디렉터리 구조를 설정한다. 이처럼 복잡한 과정을 수행하기 때문에, 이 단계에서 발생하는 오류는 Python, Git, 네트워크, 파일 권한 등 다양한 원인에 기인할 수 있다.2
설치하려는 ERPNext 버전에 맞는 Frappe 프레임워크 버전을 --frappe-branch 옵션으로 명시하는 것이 매우 중요하다. 예를 들어, ERPNext v15를 설치하려면 Frappe 프레임워크 역시 version-15를 사용해야 한다.2
실행 명령어 (ERPNext v15 기준):
Bash
bench init --frappe-branch version-15 frappe-bench --python python3.11
cd frappe-bench
다음 표는 ERPNext 주요 버전별 의존성 및 초기화 명령어를 정리한 것이다.
Table 2: ERPNext 버전별 주요 의존성 및 명령어
| ERPNext 버전 | Frappe Branch | 필수 Python 버전 | 필수 Node.js 버전 | bench init 예시 명령어 |
|---|---|---|---|---|
| v15.x | version-15 | 3.11+ | 18+ | bench init --frappe-branch version-15 frappe-bench --python python3.11 |
| v14.x | version-14 | 3.10+ | 16+ | bench init --frappe-branch version-14 frappe-bench |
| v13.x | version-13 | 3.8+ | 14+ | bench init --frappe-branch version-13 frappe-bench |
4.3 신규 사이트 생성
bench new-site 명령어는 실제 ERPNext 인스턴스로 기능할 ’사이트’를 생성한다. 이 과정에서 MariaDB에 해당 사이트 전용 데이터베이스와 데이터베이스 사용자를 자동으로 생성하며, 설치자에게 관리자(Administrator) 계정의 비밀번호를 설정하도록 요청한다. 사이트 이름은 일반적으로 서비스할 도메인 이름(예: erp.mycompany.com)으로 지정한다.1
실행 명령어: [site-name]을 원하는 도메인명으로 대체한다.
Bash
bench new-site [site-name]
4.4 ERPNext 애플리케이션 다운로드 및 설치
사이트가 준비되면, bench get-app 명령어를 사용하여 ERPNext 애플리케이션의 소스 코드를 GitHub 저장소에서 apps 디렉터리로 다운로드한다. 그 후, bench --site [site-name] install-app erpnext 명령어를 실행하여 해당 사이트에 ERPNext 애플리케이션을 실제로 ’설치’한다. 이 설치 과정은 데이터베이스에 ERPNext에 필요한 모든 테이블(Doctypes)을 생성하고 초기 데이터를 설정하는 작업을 포함한다.2
실행 명령어 (ERPNext v15 기준):
Bash
bench get-app --branch version-15 erpnext
bench --site [site-name] install-app erpnext
4.5 개발 서버를 통한 초기 검증
프로덕션 환경으로 배포하기 전에, bench start 명령어를 사용하여 내장된 개발용 웹 서버를 실행할 수 있다. 웹 브라우저를 통해 http://[서버_IP]:8000 주소로 접속했을 때 ERPNext의 로그인 화면이 정상적으로 나타나는지 확인함으로써, 지금까지의 설치 과정이 성공적으로 완료되었는지 검증할 수 있다. 이는 최종 배포 전 중요한 확인 단계이다.5
5. 부: 프로덕션 환경으로의 전환 및 배포
5.1 프로덕션 환경의 구성 요소
개발 환경은 단일 프로세스로 실행되어 안정성과 성능 면에서 실제 서비스에 적합하지 않다. 프로덕션 환경은 고가용성과 고성능을 위해 다음과 같은 추가적인 구성 요소들을 사용한다.
-
Supervisor: Python 기반의 프로세스 제어 시스템이다. ERPNext를 구동하는 Gunicorn 웹 서버 프로세스, 백그라운드 워커, 스케줄러 등이 예기치 않게 종료될 경우, 이를 감지하고 자동으로 재시작하여 서비스의 중단을 최소화하고 고가용성을 보장하는 역할을 한다.2
-
Nginx: 고성능 웹 서버이자 리버스 프록시이다. 외부에서 들어오는 표준 웹 포트(HTTP 80, HTTPS 443) 요청을 받아 내부에서 실행 중인 ERPNext 애플리케이션(예: 8000 포트)으로 안전하게 전달한다. 또한, CSS, JavaScript, 이미지와 같은 정적 파일을 직접 처리하여 애플리케이션 서버의 부하를 크게 줄여 전체적인 응답 속도를 향상시킨다.2
5.2 자동화된 프로덕션 설정
Frappe Bench는 Supervisor와 Nginx의 복잡한 설정을 자동화하는 강력한 기능을 제공한다. bench setup production 명령어는 필요한 모든 설정 파일을 생성하고, 시스템 서비스를 등록하며, 관련 권한을 설정하는 작업을 한 번에 처리해준다.1
이 명령어는 내부적으로 bench setup supervisor, bench setup nginx와 같은 하위 명령들을 순차적으로 실행하고, [frappe-user]가 암호 없이 시스템 서비스를 재시작할 수 있도록 sudoers 파일을 설정하는 등 여러 단계를 추상화한 것이다. 만약 이 자동화 명령이 실패할 경우, 아래의 수동 설정 절차를 따라 단계별로 문제를 진단하고 해결할 수 있다.
실행 명령어:
Bash
sudo bench setup production [frappe-user]
5.3 (심화) 수동 프로덕션 설정 분석
자동화된 프로세스의 내부 동작을 이해하고 문제 발생 시 대응 능력을 기르기 위해 수동 설정 절차를 분석하는 것은 유용하다.
- Supervisor 설정:
bench setup supervisor명령은 현재 Bench 디렉터리에 맞는config/supervisor.conf설정 파일을 생성한다. 이 파일을 시스템의 Supervisor 설정 디렉터리인/etc/supervisor/conf.d/에 심볼릭 링크로 연결하여 Supervisor가 ERPNext 프로세스들을 인식하고 관리하도록 한다.2
Bash
bench setup supervisor
sudo ln -s $(pwd)/config/supervisor.conf /etc/supervisor/conf.d/frappe-bench.conf
sudo supervisorctl reread
sudo supervisorctl update
- Nginx 설정:
bench setup nginx명령은config/nginx.conf파일을 생성한다. 이 파일에는 특정 도메인으로 들어온 요청을 내부 Gunicorn 프로세스로 전달하는 리버스 프록시 설정이 포함되어 있다. 이 파일을/etc/nginx/sites-available/에 링크하고, 다시/etc/nginx/sites-enabled/에 링크하여 Nginx가 해당 설정을 활성화하도록 한다.2
Bash
bench setup nginx
sudo ln -s $(pwd)/config/nginx.conf /etc/nginx/sites-available/frappe-bench.conf
sudo ln -s /etc/nginx/sites-available/frappe-bench.conf /etc/nginx/sites-enabled/frappe-bench.conf
sudo nginx -t # 설정 파일 문법 검사
sudo systemctl restart nginx
5.4 최종 서비스 활성화
프로덕션 설정이 완료된 후, 시스템이 완전한 운영 상태에 들어가기 위해 몇 가지 최종 명령을 실행해야 한다. 스케줄러를 활성화하여 정기적인 백그라운드 작업(예: 자동 백업, 이메일 알림)이 실행되도록 하고, 사이트의 유지보수 모드를 비활성화하여 일반 사용자의 접근을 허용해야 한다.3
실행 명령어:
Bash
bench --site [site-name] enable-scheduler
bench --site [site-name] set-maintenance-mode off
6. 부: 고급 설정 및 유지보수
6.1 사용자 정의 도메인 연결 및 SSL/TLS 활성화
데이터를 암호화하여 안전하게 전송하는 HTTPS 통신은 현대 웹 애플리케이션의 필수 보안 요소이다. Let’s Encrypt를 이용하면 무료로 SSL/TLS 인증서를 발급받을 수 있으며, bench 명령어는 이 과정을 자동화하여 Nginx에 손쉽게 적용할 수 있도록 지원한다.4
이 명령을 실행하기 위한 사전 조건으로, 사용하려는 도메인 이름의 DNS A 레코드가 서버의 공인 IP 주소를 정확히 가리키고 있어야 한다.
실행 명령어:
Bash
sudo apt-get install -y certbot python3-certbot-nginx
sudo bench setup lets-encrypt [site-name]
이 명령어는 인증서 발급, Nginx 설정 파일 자동 수정, 그리고 인증서의 주기적인 자동 갱신을 위한 cron 작업 등록까지 한 번에 처리한다.
6.2 DNS 기반 멀티테넌시 설정
Frappe 프레임워크의 강력한 기능 중 하나는 하나의 Bench 설치 환경에서 여러 개의 독립적인 ERPNext 사이트를 운영할 수 있는 멀티테넌시(Multi-tenancy)를 지원한다는 것이다. 각 사이트는 별개의 도메인과 데이터베이스를 가지면서도, 동일한 ERPNext 소스 코드와 서버 자원을 공유하여 효율적인 운영이 가능하다. Nginx는 들어오는 HTTP 요청의 Host 헤더를 분석하여 해당 요청을 올바른 사이트로 라우팅하는 역할을 한다. bench setup nginx 명령은 새로운 사이트가 추가될 때마다 Nginx 설정 파일에 필요한 server_name 지시문을 자동으로 추가하여 이 라우팅을 구성한다.4
실행 명령어:
Bash
# 1. 멀티테넌시 활성화 (최초 1회 실행)
bench config dns_multitenant on
# 2. 신규 사이트 추가 (예: erp.anothercompany.com)
bench new-site erp.anothercompany.com
# 3. 신규 사이트에 ERPNext 앱 설치
bench --site erp.anothercompany.com install-app erpnext
# 4. Nginx 설정 재생성 및 재시작
sudo bench setup nginx
sudo systemctl restart nginx
7. 부: 주요 문제 해결 가이드
이 섹션은 복잡한 설치 및 운영 과정에서 발생할 수 있는 일반적인 문제들과 그에 대한 해결책을 제공한다. 문제 해결의 가장 기본적이고 중요한 첫 단계는 항상 관련 로그 파일을 확인하는 것이다. 주요 로그 파일은 frappe-bench/logs/ 디렉터리, Nginx 로그( /var/log/nginx/), Supervisor 로그( /var/log/supervisor/)에 위치한다.
다음 표는 주요 문제 해결 시나리오를 정리한 것이다.
Table 3: 주요 문제 해결 시나리오
| 증상 / 오류 메시지 (Symptom / Error) | 예상 원인 (Potential Cause) | 해결 방법 / 명령어 (Solution / Command) | 관련 자료 |
|---|---|---|---|
bash: bench: command not found | ~/.local/bin이 시스템 PATH에 없음 | echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc 실행 후 source ~/.bashrc | 7 |
| 웹 페이지의 CSS/JS가 깨져서 보임 | Nginx의 정적 파일 서빙 경로 권한 부족 | frappe-user의 홈 디렉터리에 실행 권한 부여: sudo chmod o+x /home/[frappe-user] | 6 |
502 Bad Gateway Nginx 오류 | Supervisor가 Gunicorn 프로세스를 시작하지 못함 | sudo supervisorctl status로 상태 확인. frappe-bench/logs/web.error.log에서 상세 오류 확인 | 20 |
bench setup production 실패 | sudoers 권한 문제 또는 Supervisor/Nginx 미설치 | Supervisor/Nginx가 설치되었는지 확인. 수동 설정 절차(4.3)를 따라 단계별로 문제 지점 파악 | 15 |
bench install-app 중 UnicodeEncodeError | MariaDB 문자셋 설정이 utf8mb4가 아님 | 2.3절의 MariaDB 유니코드 설정 확인 및 적용 후 bench reinstall --yes [site-name] 시도 | 1 |
Operation not permitted | sudo 없이 권한이 필요한 명령 실행 | 명령어 앞에 sudo를 붙여서 실행. 예: sudo chmod -R o+rx /home/[frappe-user] | 6 |
8. 참고 자료
- How to Install ERPNext on Ubuntu 22.04 | RoseHosting, https://www.rosehosting.com/blog/how-to-install-erpnext-on-ubuntu-22-04/
- Comprehensive Guide: ERPNext Installation on Ubuntu 22.04 - Step …, https://www.pinoylinux.org/topicsplus/software-and-technology/comprehensive-guide-erpnext-installation-on-ubuntu-22-04-step-by-step-tutorial/
- How to Install ERPNext Version 15 in Ubuntu 22.04 - A step by Step …, https://codewithkarani.com/2023/12/31/how-to-install-erpnext-version-15-in-ubuntu-a-step-by-step-guide/
- kalungia/How-to-Install-ERPNext-on-Ubuntu-22.04-LTS - GitHub, https://github.com/kalungia/How-to-Install-ERPNext-on-Ubuntu-22.04-LTS
- komalswami/A-complete-Guide-to-Install-Frappe-Bench-and-ERPNext-in-Ubuntu-22.04, https://github.com/komalswami/A-complete-Guide-to-Install-Frappe-Bench-and-ERPNext-in-Ubuntu-22.04
- [Guide] How to install ERPNext v15 on Linux Ubuntu (step-by-step …, https://discuss.frappe.io/t/guide-how-to-install-erpnext-v15-on-linux-ubuntu-step-by-step-instructions/111706
- How to Install ERPNext on Ubuntu - DedicatedCore, https://www.dedicatedcore.com/blog/install-erpnext-ubuntu/
- Step-by-Step Guide to Installing ERPNext 15 with GST Compliance on Ubuntu 22.04 | by Aalam Info Solutions LLP | Medium, https://medium.com/@aalam-info-solutions-llp/step-by-step-guide-to-installing-erpnext-15-with-gst-compliance-on-ubuntu-22-04-1abd89db2bf8
- [Guide] How to Install and Setup ERPNext V15 on Linux Ubuntu (step-by-step instructions), https://discuss.frappe.io/t/guide-how-to-install-and-setup-erpnext-v15-on-linux-ubuntu-step-by-step-instructions/130164
- D-codE-Hub/Guide-to-Install-Frappe-ERPNext-in-Ubuntu-22.04-LTS - GitHub, https://github.com/D-codE-Hub/Guide-to-Install-Frappe-ERPNext-in-Ubuntu-22.04-LTS
- D-codE-Hub/Frappe-ERPNext-Version-14–in-Ubuntu-22.04-LTS - GitHub, https://github.com/D-codE-Hub/Frappe-ERPNext-Version-14–in-Ubuntu-22.04-LTS
- D-codE-Hub/Frappe-ERPNext-Version-15–in-Ubuntu-22.04-LTS - GitHub, https://github.com/D-codE-Hub/Frappe-ERPNext-Version-15–in-Ubuntu-22.04-LTS
- How to Install ERPNext on Ubuntu 22.04 - HowtoForge, https://www.howtoforge.com/how-to-install-erpnext-on-ubuntu-22-04/
- dsatsangi/Install-ERPNext-v15-on-Ubuntu-22.04-LTS - GitHub, https://github.com/dsatsangi/Install-ERPNext-v15-on-Ubuntu-22.04-LTS
- Setup Production - Documentation for Frappe Apps, https://docs.frappe.io/framework/user/en/bench/guides/setup-production
- David/bench - Gitee, https://gitee.com/godavid/bench
- How to Setup Nginx Webserver for Erpnext || Ubuntu || Centos || kali || Linux - YouTube, https://www.youtube.com/watch?v=Kkyj3rSK62o
- Setup ERPNext for Production - Code with Karani, https://codewithkarani.com/2021/09/16/setup-erpnext-for-production/
- The complete guide to install Frappe and ERPNext in your Ubuntu system - GitHub, https://github.com/ahmedalbanna/Frappe-installation-Guide
- Launching ERPNext in Production Mode Using supervisord - Google Groups, https://groups.google.com/g/erpnext-developer-forum/c/lr60wJW1ejc/m/XRuxkC1wwRMJ